# 1.程序启动：添加（姓名、电话），查找，显示所有，删除
# 2.添加联系人：让用户输入姓名和电话，注意姓名和电话号码是否重复，电话号码必须为11位数。while循环，append，strip，lower，any
# 3.查找联系人：根据姓名或者电话号码查找
# 4.显示所有联系人：enumerate
# 5.删除联系人：难点在于获得列表的的索引位置并且删除对应的位置

contacts = []

def add_contact():
    """添加联系人"""
    while True:
        name = input('请输入联系人姓名(按"q"退出添加)：').strip()
        if name.lower() == 'q':
            print('添加联系人结束！')
            return #不仅是退出循环，是退出整个函数，后面不会执行
        
        # 检查姓名是否已存在
        if any(contact['name'] == name for contact in contacts):
            print(f'⚠️ {name}已存在，请勿重复添加')
            continue
            
        while True:
            number = input('请输入电话号码(11位数字)：').strip()
            if number.lower() == 'q':
                return
                
            if not number.isdigit() or len(number) != 11:
                print('❌ 电话号码必须为11位数字')
                continue
                
            # 检查号码是否已存在
            if any(number in contact['numbers'] for contact in contacts):
                print(f'⚠️ 号码 {number} 已被其他联系人使用')
                continue
                
            break
        
        # 添加到通讯录
        contacts.append({
            'name': name,
            'numbers': [number]  # 存储为列表，支持多号码
        })
        print(f'✅ 成功添加: {name} - {number}')

def check_contact():
    """查找联系人"""
    if not contacts:
        print('通讯录为空！')
        return
        
    while True:
        keyword = input('请输入姓名或号码(按"q"退出查找)：').strip()
        if keyword.lower() == 'q':
            print('查找结束！')
            return
            
        found = False
        print('\n===== 查找结果 =====')
        for contact in contacts:
            # 支持按姓名或号码查找
            if keyword == contact['name'] or keyword in contact['numbers']:
                found = True
                print(f"📞 {contact['name']}:")
                for i, num in enumerate(contact['numbers'], 1):
                    print(f"    {i}. {num}")
        
        if not found:
            print(f'❌ 未找到: {keyword}')

def show_contact():
    """显示所有联系人"""
    if not contacts:
        print('通讯录为空！')
        return
        
    print('\n===== 通讯录列表 =====')
    for i, contact in enumerate(contacts, 1):
        print(f"{i}. {contact['name']}:")
        for j, num in enumerate(contact['numbers'], 1):
            print(f"    {j}. {num}")
    print('=' * 25)

def delete_contact():
    """删除联系人"""
    if not contacts:
        print('通讯录为空！')
        return
        
    show_contact()
    
    while True:
        try:
            choice = input('请输入要删除的联系人编号(按"q"退出)：').strip()
            if choice.lower() == 'q':
                print('删除操作取消')
                return
                
            index = int(choice) - 1
            if 0 <= index < len(contacts):
                name = contacts[index]['name']
                del contacts[index]
                print(f'✅ 已删除: {name}')
                return
            else:
                print(f'❌ 无效编号，请输入1-{len(contacts)}之间的数字')
        except ValueError:
            print('❌ 请输入有效的数字')

def main():
    """主程序"""
    print('===== 欢迎使用通讯录管理系统 =====')
    
    while True:
        print('\n请选择操作:')
        print('1. 添加联系人')
        print('2. 查找联系人')
        print('3. 显示所有联系人')
        print('4. 删除联系人')
        print('5. 退出系统')
        
        try:
            choice = int(input('请输入选项(1-5): ').strip())
            
            if choice == 1:
                add_contact()
            elif choice == 2:
                check_contact()
            elif choice == 3:
                show_contact()
            elif choice == 4:
                delete_contact()
            elif choice == 5:
                print('感谢使用，再见！')
                break
            else:
                print('❌ 请输入1-5之间的数字')
        except ValueError:
            print('❌ 输入无效，请输入数字')
            
        # 添加空行分隔操作
        print('\n' + '-' * 30)

if __name__ == '__main__':
    main()